home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / KPlib 1.3.5 / KPbasic.h < prev    next >
Text File  |  1995-12-17  |  3KB  |  133 lines

  1. // A module of KPlib v1.3.5.
  2. // Written by Keith Pomakis during the summer of 1994.
  3. // Released to the public domain on October 10, 1994.
  4.  
  5. #ifndef KP_BASIC_DEFINED
  6. #define KP_BASIC_DEFINED
  7.  
  8. #include <string.h>
  9. #include <iostream.h>
  10. #include <stdlib.h>
  11.  
  12. /****************************************************************************/
  13.  
  14. #ifndef NULL
  15. #define NULL 0
  16. #endif
  17.  
  18. #ifndef EXIT_FAILURE
  19. #define EXIT_FAILURE 1
  20. #endif
  21.  
  22. #ifndef EXIT_SUCCESS
  23. #define EXIT_SUCCESS 0
  24. #endif
  25.  
  26. /****************************************************************************/
  27.  
  28. // Since the bool type has only recently been added to the C++ standard,
  29. // many compilers may not implement it yet.  Uncomment the following lines
  30. // to simulate the bool type.
  31.  
  32. /*
  33. #define KP_SIMULATED_BOOL
  34. typedef int bool;
  35. const int false = 0;
  36. const int true = 1;
  37. */
  38.  
  39. /****************************************************************************/
  40.  
  41. #ifndef min         // Hopefully this isn't already defined as a macro
  42.  
  43. template <class T>
  44. inline T
  45. min(T arg1, T arg2)
  46. {
  47.     return (arg1 < arg2)? arg1 : arg2;
  48. }
  49.  
  50. inline char *
  51. min(char *arg1, char *arg2)
  52. {
  53.     return (strcmp(arg1, arg2) < 0)? arg1 : arg2;
  54. }
  55.  
  56. #endif
  57.  
  58. /****************************************************************************/
  59.  
  60. #ifndef max         // Hopefully this isn't already defined as a macro
  61.  
  62. template <class T>
  63. inline T
  64. max(T arg1, T arg2)
  65. {
  66.     return (arg2 < arg1)? arg1 : arg2;
  67. }
  68.  
  69. inline char *
  70. max(char *arg1, char *arg2)
  71. {
  72.     return (strcmp(arg2, arg1) < 0)? arg1 : arg2;
  73. }
  74.  
  75. #endif
  76.  
  77. /****************************************************************************/
  78.  
  79. template <class T>
  80. inline void
  81. swap(T &arg1, T &arg2)
  82. {
  83.     T tmp = arg1;
  84.     arg1 = arg2;
  85.     arg2 = tmp;
  86. }
  87.  
  88. inline void swap(int &arg1, int &arg2)
  89. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  90.  
  91. inline void swap(unsigned int &arg1, unsigned int &arg2)
  92. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  93.  
  94. inline void swap(short &arg1, short &arg2)
  95. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  96.  
  97. inline void swap(unsigned short &arg1, unsigned short &arg2)
  98. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  99.  
  100. inline void swap(long &arg1, long &arg2)
  101. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  102.  
  103. inline void swap(unsigned long &arg1, unsigned long &arg2)
  104. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  105.  
  106. inline void swap(char &arg1, char &arg2)
  107. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  108.  
  109. inline void swap(unsigned char &arg1, unsigned char &arg2)
  110. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  111.  
  112. #ifndef KP_SIMULATED_BOOL
  113. inline void swap(bool &arg1, bool &arg2)
  114. { arg1 ^= arg2 ^= arg1 ^= arg2; }
  115. #endif
  116.  
  117. /****************************************************************************/
  118.  
  119. inline void
  120. check_mem(void *ptr)
  121. {
  122.     // Declare string as static so that it isn't defined per instantiation.
  123.     static const char *const mem_err = "Error allocating memory.\n";
  124.     if (ptr == NULL) {
  125.         cerr << mem_err;
  126.         exit(EXIT_FAILURE);
  127.     }
  128. }
  129.  
  130. /****************************************************************************/
  131.  
  132. #endif /* KP_BASIC_DEFINED */
  133.